package edu.lsnu.equipment_management_system.service;

import edu.lsnu.equipment_management_system.exception.NoPowerException;
import edu.lsnu.equipment_management_system.pojo.domain.PageBean;
import edu.lsnu.equipment_management_system.pojo.vo.out.information_list.UseRecordVo;
import edu.lsnu.equipment_management_system.pojo.vo.out.information_list.damage.EquipmentDamageBasicVo;
import edu.lsnu.equipment_management_system.pojo.vo.out.information_list.damage.EquipmentDamageDetailVo;
import edu.lsnu.equipment_management_system.pojo.vo.out.information_list.repair.EquipmentRepairVo;
import edu.lsnu.equipment_management_system.pojo.vo.out.information_list.transfer_out.EquipmentTransferOutBasicVo;
import edu.lsnu.equipment_management_system.pojo.vo.out.information_list.used_using.DeviceVo;
import edu.lsnu.equipment_management_system.pojo.vo.out.information_list.used_using.EquipmentVo;
import edu.lsnu.equipment_management_system.pojo.vo.sql_conditions.UserNoAndEquipmentNoVo;

import javax.servlet.http.HttpSession;

/**
 * @author mzy
 * @Description 关于设备的信息展示的service
 * @date 2018/11/24
 */
public interface EquipmentInformationService {
    /** 管理员才能做的 */
    /** 管理员：获得所有设备的基本信息列表：没什么卵用的  */
    PageBean<DeviceVo> getAdminAllEquipmentBasicInformationVo(Integer currentPage);
    /** 管理员：获得所有用户在用的设备的简略信息列表 */
    PageBean<DeviceVo> getAdminUsingEquipmentBasicInformationVo(Integer currentPage);
    /** 管理员：获得所有用户调出的设备简略信息列表 */
    PageBean<EquipmentTransferOutBasicVo> getAdminTransferOutEquipmentBasicInformationVo(Integer currentPage);
    /** 管理员：获得所有用户在用的设备 */
    PageBean<EquipmentDamageBasicVo> getAdminDamageEquipmentBasicInformationVo(Integer currentPage);

    /** 普通用户能做的 */
    /** 普通用户：获取一个普通用户使用过的设备的简略信息列表 */
    PageBean<DeviceVo> getUserUsedEquipmentBasicInformationVo(Integer currentPage, String userNo);
    /** 普通用户：获取一个普通用户在用户的设备简略信息列表 */
    PageBean<DeviceVo> getUserUsingEquipmentBasicInformationVo(Integer currentPage, String userNo);
    /** 普通用户：获取一个普通用户报损报废的设备的简略信息列表 */
    PageBean<EquipmentDamageBasicVo> getUserDamageEquipmentBasicInformationVo(Integer currentPage, String userNo);
    /** 普通用户：获取一个普通用户调出的设备的简略信息列表 */
    PageBean<EquipmentTransferOutBasicVo> getUserTransferOutEquipmentBasicInformationVo(Integer currentPage, String userNo);
    /** 获取维修维护列表中，没有加上结束日期的维修信息 */
    PageBean<EquipmentRepairVo> getEquipmentRepairVo(Integer currentPage, String userNo);


    /** 对于获取一个设备(必须是：在用状态的设备！)的详细信息的权限校验 */
    /** 管理员：不管什么设备都能看！ */
    EquipmentVo adminGetEquipmentDetailInformationVo(String equipmentNo);
    /** 普通用户：只有在用和使用过的设备才能看，别人的设备(没有出现在过自己的设备列表中的)设备不能查看 */
    EquipmentVo userGetEquipmentDetailInformationVo(String equipmentNo, String userNo) throws NoPowerException;


    /** 对普通用户的一系列equipmentNo查询的操作进行权限校验，是否有权力查询访问，这里的话：调出和报损报废详情不用考虑 */
    /** 因为调出和报损报废的详情查询中直接就使用了userNo */
    /** 设备生命周期中，获取单个设备的简略信息；关于设备生命周期中的头部展示 */
    DeviceVo getBasicInformationInLifeCycleVo(String equipmentNo, String userNo) throws NoPowerException;
    /** 管理员和普通用户均需要：设备生命周期中，设备的一条一条的使用记录，对！这个还需要分页 */
    PageBean<UseRecordVo> getUseRecordInLifeCycleVo(Integer currentPage, String equipmentNo, HttpSession session) throws NoPowerException;

    /** 最低折旧年限和已使用年限：也要校验是否有此设备的访问权 */
    /** 已使用年限 */
    Integer getEquipmentUsedYear(String equipmentNo, String userNo) throws NoPowerException;
    /** 最低报废年限 */
    Integer getEquipmentDepreciationPeriod(String equipmentNo, String userNo) throws NoPowerException;
}
